package cn.jt.service;

import cn.jt.dao.ItemCatDao;
import cn.jt.pojo.ItemCat;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class ItemCatServiceIpml implements ItemCatService {
    @Resource
    ItemCatDao itemCatDao;

    /**
     * 1.准备map集合，实现数据封装
     * Map《key，value》 map=new Map《parentid，List《ItemCat》》
     * @param parentId
     * @return
     */
    @Override
    public List<ItemCat> itemCatService(Integer parentId) {
        long startTime = System.currentTimeMillis();
        //1.定义Map集合
        Map<Integer,List<ItemCat>> map=new HashMap<>();
        //2.查询所有的数据库信息
        List<ItemCat> list=  itemCatDao.selectList(null);

        for (ItemCat itemCat:list){
            Integer parentid=itemCat.getParentId();

            if(map.containsKey(parentid)){
                List<ItemCat> lastList=map.get(parentid);
                lastList.add(itemCat);
            }else{
                List<ItemCat> firstList=new ArrayList<>();
                firstList.add(itemCat);
                map.put(parentid, firstList);
            }
        }
       List<ItemCat> onelist=map.get(0);
        List<ItemCat> twolist=new ArrayList<>();
        List<ItemCat> threelist=new ArrayList<>();
        for(ItemCat itemCat:onelist){
            twolist=map.get(itemCat.getId());
            if(twolist==null){
                continue;
            }
            for(ItemCat itemCat1:twolist){
                threelist=map.get(itemCat1.getId());
                itemCat1.setChildren(threelist);
            }
            itemCat.setChildren(twolist);
        }
        long startTime1 = System.currentTimeMillis();
        System.out.println("一共耗时"+(startTime1-startTime)+"毫秒");
        return onelist;
//          return get(onelist,0);
    }

    @Override
    public void updateStatus(ItemCat itemCat) {
        if(itemCat.getLevel()==3){
            itemCatDao.updateById(itemCat);
        }if(itemCat.getLevel()==2){
            itemCatDao.updateById(itemCat);
            QueryWrapper<ItemCat> queryWrapper=new QueryWrapper<>();
            queryWrapper.eq("parent_id", itemCat.getId());
          List<ItemCat> list= itemCatDao.selectList(queryWrapper);
          for (ItemCat itemCat1:list){
              itemCat1.setStatus(itemCat.getStatus());
              itemCatDao.updateById(itemCat1);
          }

        }if(itemCat.getLevel()==1){
            itemCatDao.updateById(itemCat);
            QueryWrapper<ItemCat> queryWrapper=new QueryWrapper<>();
            queryWrapper.eq("parent_id", itemCat.getId());
            List<ItemCat> list= itemCatDao.selectList(queryWrapper);
            for(ItemCat itemCat1:list){
                if(itemCat.getStatus()==itemCat1.getStatus()){
                    continue;
                }
                itemCat1.setStatus(itemCat.getStatus());
                itemCatDao.updateById(itemCat1);
                queryWrapper.clear();
                queryWrapper.eq("parent_id", itemCat1.getId());
                List<ItemCat> list2= itemCatDao.selectList(queryWrapper);
                for(ItemCat itemCat2:list2){
                    if(itemCat.getStatus()==itemCat2.getStatus()){
                        continue;
                    }
                    itemCat2.setStatus(itemCat.getStatus());
                    itemCatDao.updateById(itemCat2);
                }
            }
        }
    }

    @Override
    public void updateItemCat(ItemCat itemCat) {
        itemCatDao.updateById(itemCat);
    }

    @Override
    public void saveItemCat(ItemCat itemCat) {
        itemCatDao.insert(itemCat);
    }

    @Override
    public void deleteItemCat(ItemCat itemCat) {
        if(itemCat.getLevel()==3){
            itemCatDao.deleteById(itemCat.getId());
        }if(itemCat.getLevel()==2){
            QueryWrapper<ItemCat> queryWrapper=new QueryWrapper<>();
            queryWrapper.eq("parent_id", itemCat.getId());
            itemCatDao.delete(queryWrapper);
            itemCatDao.deleteById(itemCat.getId());

        }if(itemCat.getLevel()==1){
            QueryWrapper<ItemCat> queryWrapper=new QueryWrapper<>();
            queryWrapper.eq("parent_id", itemCat.getId());
          List<ItemCat> list= itemCatDao.selectList(queryWrapper);
            queryWrapper.clear();
            for (ItemCat itemCat1:list){
                queryWrapper.clear();
                queryWrapper.eq("parent_id", itemCat1.getId());
                itemCatDao.delete(queryWrapper);
            }
            queryWrapper.eq("parent_id", itemCat.getId());
            itemCatDao.delete(queryWrapper);
            itemCatDao.deleteById(itemCat.getId());
        }
    }

//    public  List<ItemCat> get(List<ItemCat> list,Integer id){
//        List<ItemCat> arr=new ArrayList<>();
//        for(ItemCat itemCat:list){
//          if(id==itemCat.getId()){
//              itemCat.setChildren(get(list,itemCat.getParentId()));
//          }
//            arr.add(itemCat);
//        }
//        return arr;
//
//    }

//
//    @Override
//    public List<ItemCat> itemCatService(Integer parentId) {
//        QueryWrapper<ItemCat> queryWrapper=new QueryWrapper<>();
//        queryWrapper.eq("parent_id", 0);
//        List<ItemCat> list=itemCatDao.selectList(queryWrapper);
//        for(ItemCat itemCat:list){
//            queryWrapper.clear();
//            queryWrapper.eq("parent_id", 1);
//            List<ItemCat> list2= itemCatDao.selectList(queryWrapper);
//            for (ItemCat itemCat2:list2){
//                queryWrapper.clear();
//                queryWrapper.eq("parent_id", 2);
//                List<ItemCat> list3= itemCatDao.selectList(queryWrapper);
//                itemCat2.setChildren(list3);
//            }
//            itemCat.setChildren(list2);
//        }
//        return list;
//    }
}
